package com.ssy.lingxi.purchase.service.tender;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.purchase.api.dto.request.tender.*;
import com.ssy.lingxi.purchase.api.dto.response.tender.InviteTenderResponse;
import com.ssy.lingxi.purchase.entity.tender.InviteTender;
import com.ssy.lingxi.purchase.entity.tender.InviteTenderMember;
import com.ssy.lingxi.search.api.model.request.SimpleIdListRequest;
import com.ssy.lingxi.workflow.api.model.vo.response.ComplexTaskDefVO;
import org.springframework.data.domain.Page;

/**
 * 招标管理类
 * @author jw.chen
 * @version 2.0.0
 * @date 2021/3/1
 */
public interface IInviteTenderService {

    /**
     * 查询招标
     * @param
     */
    Page<InviteTender> getInviteTenderList(UserLoginCacheDTO sysUser, InviteTenderQueryRequest inviteTenderQueryRequest);

    /**
     * 查询招标
     * @param id
     */
    InviteTender getInviteTender(Long id);

    /**
     * 查询投标
     * @param sysUser
     * @return
     */
    Page<InviteTenderMember> getSubmitTenderList(UserLoginCacheDTO sysUser, SubmitTenderQueryRequest submitTenderQueryRequest);

    /**
     * 查询投标详情
     * @param submitTenderId
     * @return
     */
    InviteTenderMember getSubmitTenderMember(Long submitTenderId);

    /**
     * 添加/修改招标
     * @param inviteTender
     * @return
     */
    Long saveOrUpdateInviteTender(UserLoginCacheDTO sysUser, InviteTender inviteTender);

    /**
     * 复制招标
     * @param id
     * @return
     */
    InviteTender copyInviteTender(UserLoginCacheDTO sysUser, Long id);

    /**
     * 修改开标时间
     * @param sysUser
     * @param openTenderRequest
     * @return
     */
    String updateOpenTender(UserLoginCacheDTO sysUser, OpenTenderRequest openTenderRequest);

    /**
     * 废标
     * @param discardRequest
     * @return
     */
    String discardInviteTender(UserLoginCacheDTO sysUser, DiscardRequest discardRequest);

    /**
     * 提交审核
     * @param simpleIdListRequest
     * @return
     */
    String applyCheckInviteTender(UserLoginCacheDTO sysUser, SimpleIdListRequest simpleIdListRequest);

    /**
     * 批量删除
     * @param simpleIdListRequest 招标
     * @return
     */
    String deleteInviteTender(UserLoginCacheDTO sysUser, SimpleIdListRequest simpleIdListRequest);

    /**
     * 审核招标(一级)
     * @param checkRequest
     * @return
     */
    String checkInviteTender(UserLoginCacheDTO sysUser, CheckRequest checkRequest);

    /**
     * 审核招标(一级)(批量审核通过)
     * @param simpleIdListRequest 审核
     * @return
     */
    String checkInviteTenderBatch(UserLoginCacheDTO sysUser, SimpleIdListRequest simpleIdListRequest);

    /**
     * 提交招标
     * @param simpleIdListRequest
     * @return
     */
    String submittedInviteTender(UserLoginCacheDTO sysUser, SimpleIdListRequest simpleIdListRequest);

    /**
     * 审核报名
     * @param checkRequest
     * @return
     */
    String checkInviteTenderRegister(UserLoginCacheDTO sysUser, CheckRequest checkRequest);

    /**
     * 资格预审
     * @param checkRequest
     * @return
     */
    String checkQualifications(UserLoginCacheDTO sysUser, CheckRequest checkRequest);

    /**
     * 提交评标报告
     * @param evaluationTenderReportRequest
     * @return
     */
    String submitEvaluationTenderReport(UserLoginCacheDTO sysUser, EvaluationTenderReportRequest evaluationTenderReportRequest);

    /**
     * 提交审核定标
     * @param sysUser
     * @param checkFinishTenderRequest
     * @return
     */
    String submitCheckFinishTender(UserLoginCacheDTO sysUser, CheckFinishTenderRequest checkFinishTenderRequest);

    /**
     * 审核定标
     * @param sysUser
     * @param checkRequest
     * @return
     */
    String checkFinishTender(UserLoginCacheDTO sysUser, CheckRequest checkRequest);

    /**
     * 确认定标
     * @param sysUser
     * @param simpleIdRequest
     * @return
     */
    String finishTender(UserLoginCacheDTO sysUser, SimpleIdRequest simpleIdRequest);

    /**
     * 中标公示
     * @param sysUser
     * @param winTenderRequest
     * @return
     */
    String winTenderNotice(UserLoginCacheDTO sysUser, WinTenderRequest winTenderRequest);

    /********************************************    平台    ************************************************************/
    /**
     * 平台审核招标 22.1.20版本去掉
     * @param checkRequest
     * @return
     */
   /* String platformCheckInviteTender(CheckRequest checkRequest);*/

    /**
     * 平台审核招标(批量审核通过) 22.1.20版本去掉
     * @param simpleIdListRequest 审核
     * @return
     */
    /*String platformCheckInviteTenderBatch(SimpleIdListRequest simpleIdListRequest);*/

    /********************************************    mq状态转换    ************************************************************/
    /**
     * 报名时间截止，外部状态改成待审核报名
     * @return
     */
    void systemUpdateToSubmit(Long inviteTenderId);

    /**
     * 提交资格预审时间开始，外部状态改成待提交资格预审
     * @param inviteTenderId
     */
    void notSubmitQualificationsCheck(Long inviteTenderId);

    /**
     * 提交资格预审时间截止，外部状态改成待资格预审
     * @param inviteTenderId
     */
    void notQualificationsCheck(Long inviteTenderId);

    /**
     * 投标时间开始，外部状态改成待投标
     * @param inviteTenderId
     */
    void notSubmitTender(Long inviteTenderId);

    /**
     * 投标时间截止，外部状态改成待开标
     * @return
     */
    void systemUpdateToOpen(Long inviteTenderId);

    /**
     * 开标时间到，外部状态改成待评标
     * @return
     */
    void systemOpenTender(Long inviteTenderId);

    /**
     * 评标时间截止，内部状态改成待提交评标报告
     * @return
     */
    void systemEvaluationTender(Long inviteTenderId);

    /**
     * 查询流程步骤
     * @param sysUser
     * @param inviteTenderId
     * @return
     */
    ComplexTaskDefVO getInviteTenderProcess(UserLoginCacheDTO sysUser, Long inviteTenderId);

    /**
     * 更新招标对应的店铺积分
     */
    Boolean updateCommodityCreditScore(MemberCreditScore memberCreditScore);

    /**
     * 初始化招标对应的店铺积分
     */
    void initInviteTender();

    /**
     * 查询 待新增招标分页列表
     * @param sysUser 用户
     * @param inviteTenderQueryRequest 分页查询参数
     * @param shopType 商城类型 1.企业商城 6.采购门户
     * @return 待新增招标分页列表
     */
    Wrapper<PageData<InviteTenderResponse>> getAddInviteTenderList(UserLoginCacheDTO sysUser, InviteTenderQueryRequest inviteTenderQueryRequest,Integer shopType);
}
